package com.smart.thrift.discoveryandbalance.balancer;


import com.smart.thrift.discoveryandbalance.discovery.ThriftServerNode;
import com.smart.thrift.discoveryandbalance.discovery.ThriftServerNodeList;

import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;

public interface ILoadBalancer<T extends ThriftServerNode> {

    /**
     * 根据key选择具体提供服务的服务器节点
     * @param key ：关键字
     * @return 服务器节点
     */
    T chooseServerNode(String key);

    boolean containsServerNode(String key);

    /**
     * 获取所有的生产者服务信息
     * @return
     */
    Map<String, LinkedHashSet<T>> getAllServerNodes();

    /**
     * 获取所有的生产者服务信息
     * @return
     */
    Map<String, LinkedHashSet<T>> getRefreshedServerNodes();

    /**
     * 获取提供该服务的全量服务提供者
     * @param key
     * @return
     */
    List<T> getServerNodes(String key);

    /**
     * 根据服务关键字获取所有的更新服务节点
     * @param key
     * @return
     */
    List<T> getRefreshedServerNodes(String key);

    /**
     * 获取当前服务器的服务群
     * @return
     */
    ThriftServerNodeList<T> getThriftServerNodeList();
}
